package main

import (
	"fmt"
	"go-0650-blog-grom/dao/mysql"

	"go-0650-blog-grom/logger"
	"go-0650-blog-grom/myUtil/snowflake"
	"go-0650-blog-grom/routers"
	"go-0650-blog-grom/settings"
)

// 备注: 结构体经典调用: response.go-26行、code.go-37行

func main() {
	fmt.Println("Hello World!")

	// 加载配置
	err1 := settings.Init()
	if err1 != nil {
		fmt.Printf("load config failed, err:%v\n", err1)
		return
	}

	// 初始化日志配置
	err2 := logger.Init(settings.Conf.LogConfig, settings.Conf.Mode)
	if err2 != nil {
		fmt.Printf("init logger failed, err:%v\n", err2)
		return
	}

	// 初始化 MySQL配置
	err3 := mysql.Init(settings.Conf.MySQLConfig)
	if err3 != nil {
		fmt.Printf("init mysql failed, err:%v\n", err3)
		return
	}
	//defer mysql.Close() // 程序退出关闭数据库连接

	// Redis 暂时未配置
	//err := redis.Init(settings.Conf.RedisConfig)

	// 雪花算法生成分布式ID
	if err := snowflake.Init(1); err != nil {
		fmt.Printf("init snowflake failed, err:%v\n", err)
		return
	}

	// 全局翻译器暂时未配置
	//err := controller.InitTrans("zh")

	// 注册路由  --  后端服务处理逻辑从这里进入
	// r 的类型: *gin.Engine, 这是程序的入口
	r := routers.SetupRouter(settings.Conf.Mode)

	// 运行
	err5 := r.Run(fmt.Sprintf(":%d", settings.Conf.Port))
	if err5 != nil {
		fmt.Printf("run server failed, err:%v\n", err5)
		return
	}
}
